package com.hckjsec.common.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipUtils {
    /**
     * @describe 压缩多个文件
     * @author zfc
     * @date 2018年1月11日 下午8:34:00
     */
        public static void main(String[] args) {
            File[] srcFiles = { new File("E:\\母亲.mp4"), new File("E:\\飞机.pdf"), new File("E:\\家里密码.txt") };
            File zipFile = new File("E:\\ZipFile.zip");
            // 调用压缩方法
            zipFiles(srcFiles, zipFile);
        }

        public static boolean zipFiles(File[] srcFiles, File zipFile) {
            boolean flag=true;
            // 判断压缩后的文件存在不，不存在则创建
            if (!zipFile.exists()) {
                try {
                    zipFile.createNewFile();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            // 创建 FileOutputStream 对象
            FileOutputStream fileOutputStream = null;
            // 创建 ZipOutputStream
            ZipOutputStream zipOutputStream = null;
            // 创建 FileInputStream 对象
            FileInputStream fileInputStream = null;

            try {
                // 实例化 FileOutputStream 对象
                fileOutputStream = new FileOutputStream(zipFile);
                // 实例化 ZipOutputStream 对象
                zipOutputStream = new ZipOutputStream(fileOutputStream);
                // 创建 ZipEntry 对象
                ZipEntry zipEntry = null;
                // 遍历源文件数组
                for (int i = 0; i < srcFiles.length; i++) {
                    // 将源文件数组中的当前文件读入 FileInputStream 流中
                    fileInputStream = new FileInputStream(srcFiles[i]);
                    // 实例化 ZipEntry 对象，源文件数组中的当前文件
                    zipEntry = new ZipEntry(srcFiles[i].getName());
                    zipOutputStream.putNextEntry(zipEntry);
                    // 该变量记录每次真正读的字节个数
                    int len;
                    // 定义每次读取的字节数组
                    byte[] buffer = new byte[1024];
                    while ((len = fileInputStream.read(buffer)) > 0) {
                        zipOutputStream.write(buffer, 0, len);
                    }
                }
                zipOutputStream.closeEntry();
                zipOutputStream.close();
                fileInputStream.close();
                fileOutputStream.close();
                flag=true;
            } catch (IOException e) {
                flag=false;
                e.printStackTrace();
            }
            return  flag;
        }
}
